package org.xml.parser.SAX;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

/**
 * 创建一个类继承自DefaultHandler，重写其中的一些方法用来进行业务处理
 *
 */
public class SAXParserHandler2 extends DefaultHandler {

    /**
     * 用来标志解析开始
     */
    @Override
    public void startDocument() throws SAXException {
	super.startDocument();
	System.out.println("=============== SAX解析开始 ===============");
	System.out.println("<?xml version = \"1.0\" encoding = \"utf-8\" ?>");
    }

    /**
     * 用来标志解析结束
     */
    @Override
    public void endDocument() throws SAXException {
	super.endDocument();
	System.out.println("=============== SAX解析结束 ===============");
    }

    /**
     * 解析XML文件的开始标签，uri-名称空间，localName-名称空间的标签，如果没有名称空间，则为空
     * qName-标签名，attributes-属性集合
     */
    @Override
    public void startElement(String uri, String localName, String qName,
	    Attributes attributes) throws SAXException {
	super.startElement(uri, localName, qName, attributes);
	System.out.print("<");
	System.out.print(qName);// 输出开始标记
	if (attributes != null) {
	    // 循环输出属性
	    for (int i = 0; i < attributes.getLength(); i++) {
		System.out.print(" " + attributes.getQName(i) + " = \""
			+ attributes.getValue(i) + "\"");
	    }
	}
	System.out.print(">");
    }

    /**
     * 字符数组ch-元素中的内容，start-开始位置，length-长度
     */
    @Override
    public void characters(char[] ch, int start, int length)
	    throws SAXException {
	super.characters(ch, start, length);
	System.out.print(new String(ch, start, length));// 输出元素中的内容
    }

    /**
     * 解析XML文件的结束标签
     */
    @Override
    public void endElement(String uri, String localName, String qName)
	    throws SAXException {
	super.endElement(uri, localName, qName);
	System.out.print("</");
	System.out.print(qName);// 输出结束标记
	System.out.print(">");
    }
}
